以我第一次拿到 macOS 中的 Python 環境來說, Python 的版本相當多,就像上面這張圖一樣,除了原生系統的 Python 大概就有六隻以外,使用了 Homebrew 還會有 Homebrew 的 Python,可能在某天 brew update 了,預設 Python 還會升級讓過去所有的 Python Soft Link 改變並且導致虛擬環境全部不能 activate,不熟 Homebrew 無奈只好去官方網站下載 Python,此時只看來源不論版本就已經有三個地方會放 Python。再加上每年幾乎都會有不少的功能推陳出新,在 2020-01-01 Python2 還沒有 EOF (End of Life) 之前多多少少會有人還會傾向使用 Python2 開發,同一時刻,許多人已經轉換到使用 3.4, 3.5 甚至 3.6 等較新的版本。然而作為開發者,就會需要同時擁有多個 Python 的版本在機器上來開發不同來源的 Python 專案。至少會需要用來跑 Python2 和 Python3.3+ 的 Python 程式碼,也許原作者使用了 F-String, 還會多需要 Python3.7+ 的 Python 來執行它。
Hmm... 聽起來不太妙,總要一個籠子來好好管理這些蛇,免得早晚被蛇咬到寫不出 code 來 ,Pyenv
就是那個籠子,以下將會介紹 Pyenv
的使用方式及運作原理以及一些不用 Pyenv
的替代方案。
使用系統的 Python 確實會有些問題的:
sudo pip install
的指令,然而一但全部東西都裝在全域,接下來的套件管理也將會是場災難,當這台機器的其他使用者要使用同套件的不同版本時,他將覆蓋先前的版本又或者他根本裝不了,也許帶上 --user
參數可以緩解這個狀況,但當不同 Project 有著不同的套件版本時,同樣的問題又誕生了,你可能會需要虛擬環境來進行管理,那又會有其他的問題要誕生了。首先 Pyenv 解決了上述有關 Python 版本的全部問題,有著下列的好處
另外 Pyenv 本身並沒有提供虛擬環境控管,因此有關套件管理部分尚未得到解決,未來可能還需要自行使用內建的 venv
module 或 pyenv-virtualenv
plugin 來達成目的。
明天將會寫一些有關 Pyenv
的安裝及使用介紹。